package MWClient;

/**
 * <pre>
 * @Package : MWClient
 * @File    : ByteUtil.java
 * <pre>
 *
 * @Author  : 차재우
 * @Date    : 2013. 7. 22.
 * @Version :
 */
public class ByteUtil {
	/**
	 * <pre>
	 * @Comment : int 형의 값을 바이트 배열(4바이트)로 변환한다.
	 * 
	 * <pre>
	 * 
	 * @Method  : toBytes  
	 * @param value
	 * @return int -> byte 변환값(byte[])
	 */
	public static byte[] toBytes(int value) {
		byte[] dest = new byte[4];
		toBytes(value, dest, 0);
		return dest;
	}

	private static void toBytes(int value, byte[] dest, int destPos) {
		for (int i = 0; i < 4; i++) {
			dest[i + destPos] = (byte) (value >> ((7 - i) * 8));
		}
	}

	/**
	 * <pre>
	 * @Comment : 입력한 바이트 배열(4바이트)을 int 형으로 변환한다.
	 * 
	 * <pre>
	 * 
	 * @Method  : toInt 
	 * @param src
	 * @return byte -> int 변환값(int)
	 */
	public static int toInt(byte[] src) {
		return toInt(src, 0);
	}

	private static int toInt(byte[] src, int srcPos) {
		int dword = 0;
		for (int i = 0; i < 4; i++) {
			dword = (dword << 8) + (src[i + srcPos] & 0xFF);
		}
		return dword;
	}
	
	/**
	 * <pre>
	 * @Comment : byte(바이트) 배열을 16진수 문자열로 바꾼다.
	 * <pre>
	 *
	 * @Method  : toHexString
	 * @param bytes
	 * @return
	 */
	public static String toHexString(byte[] bytes) {
		if (bytes == null) {
			return null;
		}
		StringBuffer result = new StringBuffer();
		for (byte b : bytes) {
			result.append(Integer.toString((b & 0xF0) >> 4, 16));
			result.append(Integer.toString(b & 0x0F, 16));
		}
		return result.toString();
	}
}
